#include "listepaiement.h"

ListePaiement::ListePaiement()
{
}

float ListePaiement::TotalTypePaiement(Paiement::PaiementType typePaiement) const
{
    float Total = 0;

    if (!this->isEmpty())
    {
        for (int i = 0 ; i < this->count(); i++)
        {
            if (this->at(i).getTypePaiement() == typePaiement)
                Total += this->at(i).getMontant();
        }
    }

    return Total;
}
float ListePaiement::TotalPaiement() const
{
    float Total = 0;

    if (!this->isEmpty())
    {
        for (int i = 0 ; i < this->count(); i++)
        {
            if (this->at(i).getTypePaiement() == Paiement::Cheque || this->at(i).getTypePaiement() == Paiement::Liquide)
            {
                Total += this->at(i).getMontant();
            }
//            else
//            {
//               Total += this->at(i).getMontant();
//            }

        }
    }

    return Total;
}
float ListePaiement::TotalPaiement(int Mois, int Annee) const
{
    float Total = 0;

    if (!this->isEmpty())
    {
        for (int i = 0 ; i < this->count(); i++)
        {
            if (this->at(i).getDate().month() == Mois && this->at(i).getDate().year() == Annee)
            {
                if (this->at(i).getTypePaiement() == REMBOURSEMENTINT)
                {
                    Total -= this->at(i).getMontant();
                }
                else
                {
                   Total += this->at(i).getMontant();
                }
            }
        }
    }

    return Total;
}
float ListePaiement::TotalPaiement(int Mois, int Annee, int jour) const
{
    float Total = 0;

    if (!this->isEmpty())
    {
        for (int i = 0 ; i < this->count(); i++)
        {
            if (this->at(i).getDate().month() == Mois && this->at(i).getDate().year() == Annee && this->at(i).getDate().day() == jour)
            {
                if (this->at(i).getTypePaiement() == REMBOURSEMENTINT)
                {
                    Total -= this->at(i).getMontant();
                }
                else
                {
                   Total += this->at(i).getMontant();
                }
            }

        }
    }

    return Total;
}

ListePaiement ListePaiement::ListeDesPaiementsPourUnMois(int Mois, int Annee)
{
    ListePaiement l;
    if (!this->isEmpty())
    {
        for (int i = 0 ; i < this->count(); i++)
        {
            if (this->at(i).getDate().month() == Mois && this->at(i).getDate().year() == Annee)
            l << this->at(i);
        }
    }

    return l;
}
ListePaiement ListePaiement::ListeDesPaiementsPourMoisPrecedent(int Mois, int Annee)
{
    QDate Date(Annee,Mois, 1);
    ListePaiement l;
    if (!this->isEmpty())
    {
        for (int i = 0 ; i < this->count(); i++)
        {
            if (this->at(i).getDate() < Date)
            l << this->at(i);
        }
    }

    return l;
}

bool ListePaiement::Existe(QDate Date)
{
    if (!this->isEmpty())
    {
        for (int i = 0 ; i < this->count(); i++)
        {
            if (this->at(i).getDate() == Date)
            return true;
        }
    }

    return false;
}
QString ListePaiement::ListePaiementToString()
{
    QString datas =  SEPARATEURLISTEPAIEMENT;

    for (int i = 0 ; i < this->count(); i++)
        datas += this->at(i).PaiementToString() + SEPARATEURLISTEPAIEMENT;

    return datas + SEPARATEURLISTEPAIEMENT;
}
void ListePaiement::ChargementListePaiement(QString datas)
{
    QStringList strdata = datas.split(SEPARATEURLISTEPAIEMENT);

    for (int i = 1 ; i < strdata.count() - 2; i++)
    {
        if (Paiement::StringToPaiementTest(strdata.at(i)))
        {
            Paiement pa(strdata.at(i));
            this->append(pa);
        }
    }
    totalPaiement = TotalPaiement();
}
void ListePaiement::AjoutPaiement(Paiement paiement)
{
    this->append(paiement);
    totalPaiement = TotalPaiement();
}
Paiement ListePaiement::getPaiement(int i)const
{
    return this->at(i);
}
void ListePaiement::SupprimerPaiement(int i)
{
    this->removeAt(i);
    totalPaiement = TotalPaiement();
}
